package com.nulijiushimeili.casclient.config;

import com.nulijiushimeili.casclient.utils.CASUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

/**
 * 获取单点登录的 用户账号
 *
 * 定义本地过滤器，作用是通过从单点登录服务器获取用户账号，将登录的用户账号存到session中。
 * (CAS服务端在认证通过后,会把当前认证通过的登陆用户名传递到子系统,当然,认证通过的用户名有可能与子系统的用户名不一样,
 * 那子系统就需要一个认证通过的用户名与子系统用户的映射,在子系统拿到通过认证的用户名,再找到对应的子系统用户)
 */
@Slf4j
public class LocalUserInfoFilter implements Filter {


    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest hRequest = (HttpServletRequest) request;
        String loginName = CASUtil.getAccountNameFromCas(hRequest);
        if (StringUtils.isNotEmpty(loginName)) {
            log.info("访问者 ：" + loginName);
            hRequest.getSession().setAttribute("loginName", loginName);
        }

        chain.doFilter(request, response);
    }

    @Override
    public void destroy() {

    }
}
